//封装的交互
// 1.引入
import Vue from 'vue'
import axios from 'axios'
import qs from 'querystring'
import { errorAlert } from '../utils/alert'
import store from '../store/index'
import router from '../router/index'

// 2.配置环境

// 开发环境
if (process.env.NODE_ENV == 'development') {
    Vue.prototype.$pre = 'http://localhost:3000'
}
// 生产环境
if (process.env.NODE_ENV == 'production') {
    Vue.prototype.$pre = ''
}


//3.请求拦截
// axios.interceptors.request.use(config => {
//     // 添加请求头--->除了登录，其他接口访问数据均需设置请求头 token
//     if (config.url != '/login') {
//         config.headers.authorization = store.state.info.token
//     }
//     return config
// })

axios.interceptors.request.use(config => {
    if(config.url!=="/api/userlogin"){
        config.headers.authorization=store.state.info.token
    }
    return config
})
// 4.响应拦截
axios.interceptors.response.use(res => {
    // 统一打印
    console.group('本次请求的地址是：' + res.config.url)
    console.log(res);
    console.groupEnd()

    // 统一错误处理
    if (res.data.code !== 200) {
        errorAlert(res.data.msg)
    }

    // 掉线处理
    if(res.data.msg=="登录已过期或访问权限受限"){
        //清除vuex和本地存储的数据
        store.dispatch("changeInfo",{})

        //跳转页面
        router.replace("/login")
    }

    return res;
})

//3.封装
// get 
/**
 * get用来发起get请求的
 * url:请求地址
 * params:请求参数 默认是{}
 * 案例：get("/api/login",{phone:"1",password:"12313"}).then()
 */

export const get = (url, params = {}) => {
    return axios({
        url,
        method: 'get',
        params
    })
}

// post
/**
 * post用来发起post请求
 * url:请求地址
 * params:请求参数 默认{}
 * isFile:是否有文件 true：有文件，false就是没有文件 默认是false
 * 案例：post("/api/login",{phone:"1"},true).then(res=>{})
*/

export const post = (url, params = {}, isFile = false) => {
    let data = null;
    if (isFile) {
        // 有文件
        data = new FormData()
        for (let i in params) {
            data.append(i, params[i])
        }
    } else {
        // 无文件
        data = qs.stringify(params)
    }
    return axios({
        url,
        method: 'post',
        data
    })
}
